﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LayerData;
using LayerData.Almacen;
using LayerEntity.Almacen;
using System.Data;
using LayerEntity.Sistema;

namespace LayerLogic.Almacen
{
  public  class LAlmacen
    {
        #region Variables
        public delegate void AddObject(string msj, EnumOperaciones op, EnumEstadoOperaciones est);
        public event AddObject UpdateList = delegate { };
        readonly IPostgreSqlConnectionInfo connectionInfo;
        readonly DAlmacen common;
        List<EAlmacen> lista = new List<EAlmacen>();
        #endregion
       #region Constructores
        public LAlmacen()
        {
            this.InicializaVariables();
            this.connectionInfo = ObjectFactory.CreateConnectionInfo();
            this.common = new DAlmacen(this.connectionInfo);
        }
        public LAlmacen(IPostgreSqlConnectionInfo connection)
        {
            this.InicializaVariables();
            this.connectionInfo = connection;
            this.common = new DAlmacen(connection);
        }
        #endregion
        #region Metodos Privados
        private void InicializaVariables()
        {
           
        }
        #endregion
        #region MANTENIMIENOS
        public string MantenimientoAlmacenes(EAlmacen precio, EnumOperaciones op)
        {
            return common.MantenimientoAlamacenes(precio, (LayerData.EnumOperaciones)((int)op));
        }
        public string[] MantenimientoInventarios(EInventario inv, EnumOperaciones op)
        {
            return common.MantenimientoInventarios(inv, (LayerData.EnumOperaciones)((int)op));
        }
        public string[] MantenimientoDetInventarios(EDetInventory inv, ESeriesProd Eser, EnumOperaciones op)
        {
            return common.MantenimientoDetInventarios(inv, Eser,(LayerData.EnumOperaciones)((int)op));
        }
        #endregion
        #region LISTADO
        public DataTable GetListaAlamcen(EAlmacen obj)
        {
            return common.GetListaAlamcen(obj);
        }
        public DataTable GetListaStockAlamcen(EAlmacen obj)
        {
            return common.GetListaStockAlamcen(obj);
        }
        public DataTable GetListaCabInventario(ESistema obj)
        {
            return common.GetListaCabInventario(obj);
        }
        public DataTable GetListaDetInventario(ESistema obj)
        {
            return common.GetListaDetInventario(obj);
        }
       public DataTable GetListaSeriesProducts(ESistema obj){
           return common.GetListaSeriesProducts(obj);
       }
       public List<EAlmacen> GetAlmacen() {
           if (lista.Count == 0)
           {
               lista = common.GetAlmacen();
           }
               return lista ;
       }
       public EAlmacen GetAlmacen(int id) {
           GetAlmacen();
           return lista.Find(delegate(EAlmacen a) { return a.Id_Almacen == id; });
       }
        #endregion
    }
}
